home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 2 / AACD 2.iso / AACD / Magazine / GraphicsCards / StormMesa / src / blend.s < prev    next >
Text File  |  1999-02-04  |  34KB  |  1,884 lines

  1.  
  2. ; Storm C Compiler
  3. ; Work2:Mesa3/Mesa-3.0/src/blend.c
  4.     mc68030
  5.     mc68881
  6.     XREF    _gl_read_rgba_span
  7.     XREF    _gl_error
  8.     XREF    _gl_problem
  9.     XREF    _gl_read_alpha_pixels
  10.     XREF    _CC
  11.  
  12.     SECTION "_gl_BlendFunc:0",CODE
  13.  
  14.  
  15. ;void gl_BlendFunc( GLcontext *ctx, GLenum sfactor, GLenum dfactor )
  16.     XDEF    _gl_BlendFunc
  17. _gl_BlendFunc
  18.     move.l    d2,-(a7)
  19.     move.l    $10(a7),d0
  20.     move.l    $C(a7),d1
  21.     move.l    $8(a7),a0
  22. L108
  23. ;   if (INSIDE_BEGIN_END(ctx)) 
  24.     move.l    a0,a1
  25.     add.l    #$E968,a1
  26.     move.l    (a1),d2
  27.     cmp.l    #$1A00,d2
  28.     beq.b    L110
  29. L109
  30. ;      gl_error( ctx, GL_INVALID_OPERATION, "glBlendFunc" );
  31.     move.l    #L105,-(a7)
  32.     pea    $502.w
  33.     move.l    a0,-(a7)
  34.     jsr    _gl_error
  35.     add.w    #$C,a7
  36.     move.l    (a7)+,d2
  37.     rts
  38. L110
  39. ;   switch (sfactor)
  40.     move.l    d1,d2
  41.     cmp.l    #$306,d2
  42.     beq.b    L111
  43.     bgt.b    L117
  44.     cmp.l    #$303,d2
  45.     beq.b    L111
  46.     bgt.b    L118
  47.     cmp.l    #1,d2
  48.     beq.b    L111
  49.     bgt.b    L119
  50.     cmp.l    #0,d2
  51.     beq.b    L111
  52.     bra.b    L112
  53. L119
  54.     cmp.l    #$302,d2
  55.     beq.b    L111
  56.     bra.b    L112
  57. L118
  58.     cmp.l    #$304,d2
  59.     beq.b    L111
  60.     cmp.l    #$305,d2
  61.     beq.b    L111
  62.     bra.b    L112
  63. L117
  64.     cmp.l    #$8002,d2
  65.     beq.b    L111
  66.     bgt.b    L120
  67.     cmp.l    #$308,d2
  68.     beq.b    L111
  69.     bgt.b    L121
  70.     blt.b    L111
  71. L121
  72.     cmp.l    #$8001,d2
  73.     beq.b    L111
  74.     bra.b    L112
  75. L120
  76.     cmp.l    #$8003,d2
  77.     beq.b    L111
  78.     cmp.l    #$8004,d2
  79.     beq.b    L111
  80.     bra.b    L112
  81. ;      
  82. L111
  83. ;     ctx->Color.BlendSrc = sfactor;
  84.     move.l    d1,$21EE(a0)
  85. ;     
  86.     bra.b    L113
  87. L112
  88. ;     gl_error( ctx, GL_INVALID_ENUM, "glBlendFunc(sfactor)" );
  89.     move.l    #L106,-(a7)
  90.     pea    $500.w
  91.     move.l    a0,-(a7)
  92.     jsr    _gl_error
  93.     add.w    #$C,a7
  94.     move.l    (a7)+,d2
  95.     rts
  96. L113
  97. ;     return;
  98. ;   switch (dfactor)
  99.     move.l    d0,d1
  100.     cmp.l    #$304,d1
  101.     beq    L114
  102.     bgt.b    L122
  103.     cmp.l    #$301,d1
  104.     beq    L114
  105.     bgt.b    L123
  106.     cmp.l    #1,d1
  107.     beq    L114
  108.     bgt.b    L124
  109.     cmp.l    #0,d1
  110.     beq.b    L114
  111.     bra    L115
  112. L124
  113.     cmp.l    #$300,d1
  114.     beq.b    L114
  115.     bra.b    L115
  116. L123
  117.     cmp.l    #$302,d1
  118.     beq.b    L114
  119.     cmp.l    #$303,d1
  120.     beq.b    L114
  121.     bra.b    L115
  122. L122
  123.     cmp.l    #$8002,d1
  124.     beq.b    L114
  125.     bgt.b    L125
  126.     cmp.l    #$305,d1
  127.     beq.b    L114
  128.     cmp.l    #$8001,d1
  129.     beq.b    L114
  130.     bra.b    L115
  131. L125
  132.     cmp.l    #$8003,d1
  133.     beq.b    L114
  134.     cmp.l    #$8004,d1
  135.     beq.b    L114
  136.     bra.b    L115
  137. ;      
  138. L114
  139. ;     ctx->Color.BlendDst = dfactor;
  140.     move.l    d0,$21F2(a0)
  141. ;     
  142.     bra.b    L116
  143. L115
  144. ;     gl_error( ctx, GL_INVALID_ENUM, "glBlendFunc(dfactor)" );
  145.     move.l    #L107,-(a7)
  146.     pea    $500.w
  147.     move.l    a0,-(a7)
  148.     jsr    _gl_error
  149.     add.w    #$C,a7
  150.     move.l    (a7)+,d2
  151.     rts
  152. L116
  153. ;     return;
  154. ;   ctx->Color.BlendFunc = NULL;
  155.     clr.l    $220A(a0)
  156. ;   ctx->NewState |= NEW_RASTER_OPS;
  157.     move.l    a0,a1
  158.     add.l    #$E960,a1
  159.     move.l    (a1),d0
  160.     or.l    #2,d0
  161.     add.l    #$E960,a0
  162.     move.l    d0,(a0)
  163.     move.l    (a7)+,d2
  164.     rts
  165.  
  166. L105
  167.     dc.b    'glBlendFunc',0
  168. L107
  169.     dc.b    'glBlendFunc(dfactor)',0
  170. L106
  171.     dc.b    'glBlendFunc(sfactor)',0
  172.  
  173.     SECTION "_gl_BlendEquation:0",CODE
  174.  
  175.     rts
  176.  
  177. ;void gl_BlendEquation( GLcontext *ctx, GLenum mode )
  178.     XDEF    _gl_BlendEquation
  179. _gl_BlendEquation
  180.     move.l    $8(a7),d0
  181.     move.l    4(a7),a0
  182. L127
  183. ;   if (INSIDE_BEGIN_END(ctx)) 
  184.     move.l    a0,a1
  185.     add.l    #$E968,a1
  186.     move.l    (a1),d1
  187.     cmp.l    #$1A00,d1
  188.     beq.b    L129
  189. L128
  190. ;      gl_error( ctx, GL_INVALID_OPERATION, "glBlendEquation" );
  191.     move.l    #L126,-(a7)
  192.     pea    $502.w
  193.     move.l    a0,-(a7)
  194.     jsr    _gl_error
  195.     add.w    #$C,a7
  196.     rts
  197. L129
  198. ;   switch (mode)
  199.     move.l    d0,d1
  200.     cmp.l    #$8008,d1
  201.     beq.b    L130
  202.     bgt.b    L137
  203.     cmp.l    #$8006,d1
  204.     beq.b    L130
  205.     bgt.b    L138
  206.     cmp.l    #$BF1,d1
  207.     beq.b    L130
  208.     bra.b    L131
  209. L138
  210.     bgt.b    L130
  211. L137
  212.     cmp.l    #$800A,d1
  213.     beq.b    L130
  214.     cmp.l    #$800B,d1
  215.     beq.b    L130
  216.     bra.b    L131
  217. ;      
  218. L130
  219. ;     ctx->Color.BlendEquation = mode;
  220.     move.l    d0,$21F6(a0)
  221. ;     
  222.     bra.b    L132
  223. L131
  224. ;     gl_error( ctx, GL_INVALID_ENUM, "glBlendEquation" );
  225.     move.l    #L126,-(a7)
  226.     pea    $500.w
  227.     move.l    a0,-(a7)
  228.     jsr    _gl_error
  229.     add.w    #$C,a7
  230.     rts
  231. L132
  232. ;     return;
  233. ;   if (mode==GL_LOGIC_OP && ctx->Color.BlendEnabled) 
  234.     cmp.l    #$BF1,d0
  235.     bne.b    L135
  236. L133
  237.     tst.b    $21ED(a0)
  238.     beq.b    L135
  239. L134
  240. ;      ctx->Color.ColorLogicOpEnabled = GL_TRUE;
  241.     move.b    #1,$2213(a0)
  242.     bra.b    L136
  243. L135
  244. ;      ctx->Color.ColorLogicOpEnabled = GL_FALSE;
  245.     clr.b    $2213(a0)
  246. L136
  247. ;   ctx->Color.BlendFunc = NULL;
  248.     clr.l    $220A(a0)
  249. ;   ctx->NewState |= NEW_RASTER_OPS;
  250.     move.l    a0,a1
  251.     add.l    #$E960,a1
  252.     move.l    (a1),d0
  253.     or.l    #2,d0
  254.     add.l    #$E960,a0
  255.     move.l    d0,(a0)
  256.     rts
  257.  
  258. L126
  259.     dc.b    'glBlendEquation',0
  260.  
  261.     SECTION "_gl_BlendColor:0",CODE
  262.  
  263.  
  264. ;void gl_BlendColor( GLcontext *ctx, GLclampf red, GLclampf green,
  265.     XDEF    _gl_BlendColor
  266. _gl_BlendColor
  267.     fmovem.x fp2/fp3/fp4,-(a7)
  268.     move.l    $28(a7),a0
  269.     fmove.s    $2C(a7),fp0
  270.     fmove.s    $38(a7),fp1
  271.     fmove.s    $34(a7),fp2
  272.     fmove.s    $30(a7),fp3
  273. L139
  274. ;   ctx->Color.BlendColor[0] = CLAMP( red,   0.0, 1.0 );
  275.     fmove.x    fp0,fp4
  276.     fcmp.d    #$.00000000.00000000,fp4
  277.     fboge.b    L141
  278. L140
  279.     fmove.d    #$.00000000.00000000,fp0
  280.     bra.b    L145
  281. L141
  282.     fmove.x    fp0,fp4
  283.     fcmp.d    #$.3FF00000.00000000,fp4
  284.     fbole.b    L143
  285. L142
  286.     fmove.d    #$.3FF00000.00000000,fp0
  287. L143
  288. L144
  289. L145
  290.     fmove.s    fp0,$21FA(a0)
  291. ;   ctx->Color.BlendColor[1] = CLAMP( green, 0.0, 1.0 );
  292.     fmove.x    fp3,fp0
  293.     fcmp.d    #$.00000000.00000000,fp0
  294.     fboge.b    L147
  295. L146
  296.     fmove.d    #$.00000000.00000000,fp0
  297.     bra.b    L151
  298. L147
  299.     fmove.x    fp3,fp0
  300.     fcmp.d    #$.3FF00000.00000000,fp0
  301.     fbole.b    L149
  302. L148
  303.     fmove.d    #$.3FF00000.00000000,fp0
  304.     bra.b    L150
  305. L149
  306.     fmove.x    fp3,fp0
  307. L150
  308. L151
  309.     lea    $21FA(a0),a1
  310.     fmove.s    fp0,4(a1)
  311. ;   ctx->Color.BlendColor[2] = CLAMP( blue,  0.0, 1.0 );
  312.     fmove.x    fp2,fp0
  313.     fcmp.d    #$.00000000.00000000,fp0
  314.     fboge.b    L153
  315. L152
  316.     fmove.d    #$.00000000.00000000,fp0
  317.     bra.b    L157
  318. L153
  319.     fmove.x    fp2,fp0
  320.     fcmp.d    #$.3FF00000.00000000,fp0
  321.     fbole.b    L155
  322. L154
  323.     fmove.d    #$.3FF00000.00000000,fp0
  324.     bra.b    L156
  325. L155
  326.     fmove.x    fp2,fp0
  327. L156
  328. L157
  329.     lea    $21FA(a0),a1
  330.     fmove.s    fp0,$8(a1)
  331. ;   ctx->Color.BlendColor[3] = CLAMP( alpha, 0.0, 1.0 );
  332.     fmove.x    fp1,fp0
  333.     fcmp.d    #$.00000000.00000000,fp0
  334.     fboge.b    L159
  335. L158
  336.     fmove.d    #$.00000000.00000000,fp0
  337.     bra.b    L163
  338. L159
  339.     fmove.x    fp1,fp0
  340.     fcmp.d    #$.3FF00000.00000000,fp0
  341.     fbole.b    L161
  342. L160
  343.     fmove.d    #$.3FF00000.00000000,fp0
  344.     bra.b    L162
  345. L161
  346.     fmove.x    fp1,fp0
  347. L162
  348. L163
  349.     lea    $21FA(a0),a0
  350.     fmove.s    fp0,$C(a0)
  351.     fmovem.x (a7)+,fp2/fp3/fp4
  352.     rts
  353.  
  354.     SECTION "_blend_transparency:0",CODE
  355.  
  356.  
  357. ;static void blend_transparency( GLcontext *ctx, GLuint n, const GLub
  358. _blend_transparency
  359. L173    EQU    -$1C
  360.     link    a5,#L173
  361.     movem.l    d2-d7/a2-a4,-(a7)
  362.     movem.l    $14(a5),a0/a1
  363.     move.l    $10(a5),a4
  364. L164
  365. ;   for (i=0;
  366.     moveq    #0,d0
  367.     bra    L171
  368. L165
  369. ;      if (mask[i]) 
  370.     tst.b    0(a4,d0.l)
  371.     beq    L170
  372. L166
  373. ;     GLint t = rgba[i][ACOMP];
  374.     lea    0(a0,d0.l*4),a2
  375.     moveq    #0,d5
  376.     move.b    3(a2),d5
  377. ;     if (t == 0) 
  378.     tst.l    d5
  379.     bne.b    L168
  380. L167
  381. ;        rgba[i][RCOMP] = dest[i][RCOMP];
  382.     move.b    0(a1,d0.l*4),0(a0,d0.l*4)
  383. ;        rgba[i][GCOMP] = dest[i][GCOMP];
  384.     lea    0(a1,d0.l*4),a2
  385.     move.b    1(a2),d1
  386.     lea    0(a0,d0.l*4),a2
  387.     move.b    d1,1(a2)
  388. ;        rgba[i][BCOMP] = dest[i][BCOMP];
  389.     lea    0(a1,d0.l*4),a2
  390.     move.b    2(a2),d1
  391.     lea    0(a0,d0.l*4),a2
  392.     move.b    d1,2(a2)
  393. ;        rgba[i][ACOMP] = dest[i][ACOMP];
  394.     lea    0(a1,d0.l*4),a2
  395.     move.b    3(a2),d1
  396.     lea    0(a0,d0.l*4),a2
  397.     move.b    d1,3(a2)
  398.     bra    L170
  399. L168
  400. ;     else if (t == 255) 
  401.     cmp.l    #$FF,d5
  402.     beq    L170
  403. L169
  404. ;        GLint s = 255 - t;
  405.     move.l    #$FF,d1
  406.     sub.l    d5,d1
  407.     move.l    d1,d7
  408. ;        GLint r = (rgba[i][RCOMP] * t + dest[i][RCOMP] * s) >> 8;
  409.     moveq    #0,d4
  410.     move.b    0(a0,d0.l*4),d4
  411.     muls.l    d5,d4
  412.     moveq    #0,d1
  413.     move.b    0(a1,d0.l*4),d1
  414.     muls.l    d7,d1
  415.     add.l    d1,d4
  416.     moveq    #$8,d1
  417.     asr.l    d1,d4
  418. ;        GLint g = (rgba[i][GCOMP] * t + dest[i][GCOMP] * s) >> 8;
  419.     lea    0(a0,d0.l*4),a2
  420.     moveq    #0,d3
  421.     move.b    1(a2),d3
  422.     muls.l    d5,d3
  423.     lea    0(a1,d0.l*4),a2
  424.     moveq    #0,d1
  425.     move.b    1(a2),d1
  426.     muls.l    d7,d1
  427.     add.l    d1,d3
  428.     moveq    #$8,d1
  429.     asr.l    d1,d3
  430. ;        GLint b = (rgba[i][BCOMP] * t + dest[i][BCOMP] * s) >> 8;
  431.     lea    0(a0,d0.l*4),a2
  432.     moveq    #0,d2
  433.     move.b    2(a2),d2
  434.     muls.l    d5,d2
  435.     lea    0(a1,d0.l*4),a2
  436.     moveq    #0,d1
  437.     move.b    2(a2),d1
  438.     muls.l    d7,d1
  439.     add.l    d1,d2
  440.     moveq    #$8,d1
  441.     asr.l    d1,d2
  442. ;        GLint a = (rgba[i][ACOMP] * t + dest[i][ACOMP] * s) >> 8;
  443.     lea    0(a0,d0.l*4),a2
  444.     moveq    #0,d1
  445.     move.b    3(a2),d1
  446.     muls.l    d5,d1
  447.     lea    0(a1,d0.l*4),a2
  448.     moveq    #0,d5
  449.     move.b    3(a2),d5
  450.     muls.l    d7,d5
  451.     add.l    d5,d1
  452.     moveq    #$8,d5
  453.     asr.l    d5,d1
  454. ;        rgba[i][RCOMP] = r;
  455.     move.b    d4,0(a0,d0.l*4)
  456. ;        rgba[i][GCOMP] = g;
  457.     lea    0(a0,d0.l*4),a2
  458.     move.b    d3,1(a2)
  459. ;        rgba[i][BCOMP] = b;
  460.     lea    0(a0,d0.l*4),a2
  461.     move.b    d2,2(a2)
  462. ;        rgba[i][ACOMP] = a;
  463.     lea    0(a0,d0.l*4),a2
  464.     move.b    d1,3(a2)
  465. L170
  466.     addq.l    #1,d0
  467. L171
  468.     cmp.l    $C(a5),d0
  469.     blo    L165
  470. L172
  471.     movem.l    (a7)+,d2-d7/a2-a4
  472.     unlk    a5
  473.     rts
  474.  
  475.     SECTION "_blend_add:0",CODE
  476.  
  477.  
  478. ;static void blend_add( GLcontext *ctx, GLuint n, const GLubyte mask[
  479. _blend_add
  480.     movem.l    d2-d6/a2-a4,-(a7)
  481.     movem.l    $28(a7),d6/a4
  482.     movem.l    $30(a7),a0/a1
  483. L174
  484. ;   (void) ctx;
  485. ;   for (i=0;
  486.     moveq    #0,d0
  487.     bra    L190
  488. L175
  489. ;      if (mask[i]) 
  490.     tst.b    0(a4,d0.l)
  491.     beq    L189
  492. L176
  493. ;     GLint r = rgba[i][RCOMP] + dest[i][RCOMP];
  494.     moveq    #0,d4
  495.     move.b    0(a0,d0.l*4),d4
  496.     moveq    #0,d1
  497.     move.b    0(a1,d0.l*4),d1
  498.     add.l    d1,d4
  499. ;     GLint g = rgba[i][GCOMP] + dest[i][GCOMP];
  500.     lea    0(a0,d0.l*4),a2
  501.     moveq    #0,d3
  502.     move.b    1(a2),d3
  503.     lea    0(a1,d0.l*4),a2
  504.     moveq    #0,d1
  505.     move.b    1(a2),d1
  506.     add.l    d1,d3
  507. ;     GLint b = rgba[i][BCOMP] + dest[i][BCOMP];
  508.     lea    0(a0,d0.l*4),a2
  509.     moveq    #0,d2
  510.     move.b    2(a2),d2
  511.     lea    0(a1,d0.l*4),a2
  512.     moveq    #0,d1
  513.     move.b    2(a2),d1
  514.     add.l    d1,d2
  515. ;     GLint a = rgba[i][ACOMP] + dest[i][ACOMP];
  516.     lea    0(a0,d0.l*4),a2
  517.     moveq    #0,d1
  518.     move.b    3(a2),d1
  519.     lea    0(a1,d0.l*4),a2
  520.     moveq    #0,d5
  521.     move.b    3(a2),d5
  522.     add.l    d5,d1
  523. ;     rgba[i][RCOMP] = MIN2( r, 255 );
  524.     cmp.l    #$FF,d4
  525.     bge.b    L178
  526. L177
  527.     bra.b    L179
  528. L178
  529.     move.l    #$FF,d4
  530. L179
  531.     move.b    d4,0(a0,d0.l*4)
  532. ;     rgba[i][GCOMP] = MIN2( g, 255 );
  533.     cmp.l    #$FF,d3
  534.     bge.b    L181
  535. L180
  536.     bra.b    L182
  537. L181
  538.     move.l    #$FF,d3
  539. L182
  540.     lea    0(a0,d0.l*4),a2
  541.     move.b    d3,1(a2)
  542. ;     rgba[i][BCOMP] = MIN2( b, 255 );
  543.     cmp.l    #$FF,d2
  544.     bge.b    L184
  545. L183
  546.     bra.b    L185
  547. L184
  548.     move.l    #$FF,d2
  549. L185
  550.     lea    0(a0,d0.l*4),a2
  551.     move.b    d2,2(a2)
  552. ;     rgba[i][ACOMP] = MIN2( a, 255 );
  553.     cmp.l    #$FF,d1
  554.     bge.b    L187
  555. L186
  556.     bra.b    L188
  557. L187
  558.     move.l    #$FF,d1
  559. L188
  560.     lea    0(a0,d0.l*4),a2
  561.     move.b    d1,3(a2)
  562. L189
  563.     addq.l    #1,d0
  564. L190
  565.     cmp.l    d6,d0
  566.     blo    L175
  567. L191
  568.     movem.l    (a7)+,d2-d6/a2-a4
  569.     rts
  570.  
  571.     SECTION "_blend_min:0",CODE
  572.  
  573.  
  574. ;static void blend_min( GLcontext *ctx, GLuint n, const GLubyte mask[
  575. _blend_min
  576.     movem.l    d2/d3/a2-a4,-(a7)
  577.     movem.l    $1C(a7),d3/a4
  578.     movem.l    $24(a7),a0/a1
  579. L192
  580. ;   (void) ctx;
  581. ;   for (i=0;
  582.     moveq    #0,d0
  583.     bra    L208
  584. L193
  585. ;      if (mask[i]) 
  586.     tst.b    0(a4,d0.l)
  587.     beq    L207
  588. L194
  589. ;     rgba[i][RCOMP] = MIN2( rgba[i][RCOMP], dest[i][RCOMP] );
  590.     move.b    0(a0,d0.l*4),d2
  591.     cmp.b    0(a1,d0.l*4),d2
  592.     bhs.b    L196
  593. L195
  594.     move.b    0(a0,d0.l*4),d1
  595.     bra.b    L197
  596. L196
  597.     move.b    0(a1,d0.l*4),d1
  598. L197
  599.     move.b    d1,0(a0,d0.l*4)
  600. ;     rgba[i][GCOMP] = MIN2( rgba[i][GCOMP], dest[i][GCOMP] );
  601.     lea    0(a0,d0.l*4),a2
  602.     move.b    1(a2),d2
  603.     lea    0(a1,d0.l*4),a2
  604.     cmp.b    1(a2),d2
  605.     bhs.b    L199
  606. L198
  607.     lea    0(a0,d0.l*4),a2
  608.     move.b    1(a2),d1
  609.     bra.b    L200
  610. L199
  611.     lea    0(a1,d0.l*4),a2
  612.     move.b    1(a2),d1
  613. L200
  614.     lea    0(a0,d0.l*4),a2
  615.     move.b    d1,1(a2)
  616. ;     rgba[i][BCOMP] = MIN2( rgba[i][BCOMP], dest[i][BCOMP] );
  617.     lea    0(a0,d0.l*4),a2
  618.     move.b    2(a2),d2
  619.     lea    0(a1,d0.l*4),a2
  620.     cmp.b    2(a2),d2
  621.     bhs.b    L202
  622. L201
  623.     lea    0(a0,d0.l*4),a2
  624.     move.b    2(a2),d1
  625.     bra.b    L203
  626. L202
  627.     lea    0(a1,d0.l*4),a2
  628.     move.b    2(a2),d1
  629. L203
  630.     lea    0(a0,d0.l*4),a2
  631.     move.b    d1,2(a2)
  632. ;     rgba[i][ACOMP] = MIN2( rgba[i][ACOMP], dest[i][ACOMP] );
  633.     lea    0(a0,d0.l*4),a2
  634.     move.b    3(a2),d2
  635.     lea    0(a1,d0.l*4),a2
  636.     cmp.b    3(a2),d2
  637.     bhs.b    L205
  638. L204
  639.     lea    0(a0,d0.l*4),a2
  640.     move.b    3(a2),d1
  641.     bra.b    L206
  642. L205
  643.     lea    0(a1,d0.l*4),a2
  644.     move.b    3(a2),d1
  645. L206
  646.     lea    0(a0,d0.l*4),a2
  647.     move.b    d1,3(a2)
  648. L207
  649.     addq.l    #1,d0
  650. L208
  651.     cmp.l    d3,d0
  652.     blo    L193
  653. L209
  654.     movem.l    (a7)+,d2/d3/a2-a4
  655.     rts
  656.  
  657.     SECTION "_blend_max:0",CODE
  658.  
  659.  
  660. ;static void blend_max( GLcontext *ctx, GLuint n, const GLubyte mask[
  661. _blend_max
  662.     movem.l    d2/d3/a2-a4,-(a7)
  663.     movem.l    $1C(a7),d3/a4
  664.     movem.l    $24(a7),a0/a1
  665. L210
  666. ;   (void) ctx;
  667. ;   for (i=0;
  668.     moveq    #0,d0
  669.     bra    L226
  670. L211
  671. ;      if (mask[i]) 
  672.     tst.b    0(a4,d0.l)
  673.     beq    L225
  674. L212
  675. ;     rgba[i][RCOMP] = MAX2( rgba[i][RCOMP], dest[i][RCOMP] );
  676.     move.b    0(a0,d0.l*4),d2
  677.     cmp.b    0(a1,d0.l*4),d2
  678.     bls.b    L214
  679. L213
  680.     move.b    0(a0,d0.l*4),d1
  681.     bra.b    L215
  682. L214
  683.     move.b    0(a1,d0.l*4),d1
  684. L215
  685.     move.b    d1,0(a0,d0.l*4)
  686. ;     rgba[i][GCOMP] = MAX2( rgba[i][GCOMP], dest[i][GCOMP] );
  687.     lea    0(a0,d0.l*4),a2
  688.     move.b    1(a2),d2
  689.     lea    0(a1,d0.l*4),a2
  690.     cmp.b    1(a2),d2
  691.     bls.b    L217
  692. L216
  693.     lea    0(a0,d0.l*4),a2
  694.     move.b    1(a2),d1
  695.     bra.b    L218
  696. L217
  697.     lea    0(a1,d0.l*4),a2
  698.     move.b    1(a2),d1
  699. L218
  700.     lea    0(a0,d0.l*4),a2
  701.     move.b    d1,1(a2)
  702. ;     rgba[i][BCOMP] = MAX2( rgba[i][BCOMP], dest[i][BCOMP] );
  703.     lea    0(a0,d0.l*4),a2
  704.     move.b    2(a2),d2
  705.     lea    0(a1,d0.l*4),a2
  706.     cmp.b    2(a2),d2
  707.     bls.b    L220
  708. L219
  709.     lea    0(a0,d0.l*4),a2
  710.     move.b    2(a2),d1
  711.     bra.b    L221
  712. L220
  713.     lea    0(a1,d0.l*4),a2
  714.     move.b    2(a2),d1
  715. L221
  716.     lea    0(a0,d0.l*4),a2
  717.     move.b    d1,2(a2)
  718. ;     rgba[i][ACOMP] = MAX2( rgba[i][ACOMP], dest[i][ACOMP] );
  719.     lea    0(a0,d0.l*4),a2
  720.     move.b    3(a2),d2
  721.     lea    0(a1,d0.l*4),a2
  722.     cmp.b    3(a2),d2
  723.     bls.b    L223
  724. L222
  725.     lea    0(a0,d0.l*4),a2
  726.     move.b    3(a2),d1
  727.     bra.b    L224
  728. L223
  729.     lea    0(a1,d0.l*4),a2
  730.     move.b    3(a2),d1
  731. L224
  732.     lea    0(a0,d0.l*4),a2
  733.     move.b    d1,3(a2)
  734. L225
  735.     addq.l    #1,d0
  736. L226
  737.     cmp.l    d3,d0
  738.     blo    L211
  739. L227
  740.     movem.l    (a7)+,d2/d3/a2-a4
  741.     rts
  742.  
  743.     SECTION "_blend_modulate:0",CODE
  744.  
  745.  
  746. ;static void blend_modulate( GLcontext *ctx, GLuint n, const GLubyte 
  747. _blend_modulate
  748.     movem.l    d2-d6/a2-a4,-(a7)
  749.     movem.l    $28(a7),d6/a4
  750.     movem.l    $30(a7),a0/a1
  751. L228
  752. ;   (void) ctx;
  753. ;   for (i=0;
  754.     moveq    #0,d0
  755.     bra    L232
  756. L229
  757. ;      if (mask[i]) 
  758.     tst.b    0(a4,d0.l)
  759.     beq    L231
  760. L230
  761. ;     GLint r = (rgba[i][RCOMP] * dest[i][RCOMP]) >> 8;
  762.     moveq    #0,d2
  763.     move.b    0(a0,d0.l*4),d2
  764.     moveq    #0,d1
  765.     move.b    0(a1,d0.l*4),d1
  766.     move.w    d2,d4
  767.     mulu    d1,d4
  768.     moveq    #$8,d1
  769.     lsr.l    d1,d4
  770. ;     GLint g = (rgba[i][GCOMP] * dest[i][GCOMP]) >> 8;
  771.     lea    0(a0,d0.l*4),a2
  772.     moveq    #0,d2
  773.     move.b    1(a2),d2
  774.     lea    0(a1,d0.l*4),a2
  775.     moveq    #0,d1
  776.     move.b    1(a2),d1
  777.     move.w    d2,d3
  778.     mulu    d1,d3
  779.     moveq    #$8,d1
  780.     lsr.l    d1,d3
  781. ;     GLint b = (rgba[i][BCOMP] * dest[i][BCOMP]) >> 8;
  782.     lea    0(a0,d0.l*4),a2
  783.     moveq    #0,d2
  784.     move.b    2(a2),d2
  785.     lea    0(a1,d0.l*4),a2
  786.     moveq    #0,d1
  787.     move.b    2(a2),d1
  788.     mulu    d1,d2
  789.     moveq    #$8,d1
  790.     lsr.l    d1,d2
  791. ;     GLint a = (rgba[i][ACOMP] * dest[i][ACOMP]) >> 8;
  792.     lea    0(a0,d0.l*4),a2
  793.     moveq    #0,d5
  794.     move.b    3(a2),d5
  795.     lea    0(a1,d0.l*4),a2
  796.     moveq    #0,d1
  797.     move.b    3(a2),d1
  798.     mulu    d5,d1
  799.     moveq    #$8,d5
  800.     lsr.l    d5,d1
  801. ;     rgba[i][RCOMP] = r;
  802.     move.b    d4,0(a0,d0.l*4)
  803. ;     rgba[i][GCOMP] = g;
  804.     lea    0(a0,d0.l*4),a2
  805.     move.b    d3,1(a2)
  806. ;     rgba[i][BCOMP] = b;
  807.     lea    0(a0,d0.l*4),a2
  808.     move.b    d2,2(a2)
  809. ;     rgba[i][ACOMP] = a;
  810.     lea    0(a0,d0.l*4),a2
  811.     move.b    d1,3(a2)
  812. L231
  813.     addq.l    #1,d0
  814. L232
  815.     cmp.l    d6,d0
  816.     blo    L229
  817. L233
  818.     movem.l    (a7)+,d2-d6/a2-a4
  819.     rts
  820.  
  821.     SECTION "_blend_general:0",CODE
  822.  
  823.  
  824. ;static void blend_general( GLcontext *ctx, GLuint n, const GLubyte m
  825. _blend_general
  826. L320    EQU    -$128
  827.     link    a5,#L320
  828.     movem.l    d2-d7/a2-a4,-(a7)
  829.     fmovem.x fp2/fp3/fp4/fp5/fp6/fp7,-(a7)
  830.     move.l    $8(a5),a2
  831.     move.l    $14(a5),a3
  832.     move.l    $18(a5),a4
  833. L236
  834. ;   GLfloat rscale = 1.0F / 255.0F;
  835.     move.l    #$3B808080,-4(a5)
  836. ;   GLfloat gscale = 1.0F / 255.0F;
  837.     move.l    #$3B808080,-$8(a5)
  838. ;   GLfloat bscale = 1.0F / 255.0F;
  839.     move.l    #$3B808080,-$C(a5)
  840. ;   GLfloat ascale = 1.0F / 255.0F;
  841.     move.l    #$3B808080,-$10(a5)
  842. ;   for (i=0;
  843.     moveq    #0,d2
  844.     bra    L318
  845. L237
  846. ;      if (mask[i]) 
  847.     move.l    $10(a5),a1
  848.     tst.b    0(a1,d2.l)
  849.     beq    L317
  850. L238
  851. ;     Rs = rgba[i][RCOMP];
  852.     moveq    #0,d0
  853.     move.b    0(a3,d2.l*4),d0
  854.     move.l    d0,-$18(a5)
  855. ;     Gs = rgba[i][GCOMP];
  856.     lea    0(a3,d2.l*4),a0
  857.     moveq    #0,d0
  858.     move.b    1(a0),d0
  859.     move.l    d0,-$1C(a5)
  860. ;     Bs = rgba[i][BCOMP];
  861.     lea    0(a3,d2.l*4),a0
  862.     moveq    #0,d0
  863.     move.b    2(a0),d0
  864.     move.l    d0,-$20(a5)
  865. ;     As = rgba[i][ACOMP];
  866.     lea    0(a3,d2.l*4),a0
  867.     moveq    #0,d4
  868.     move.b    3(a0),d4
  869. ;     Rd = dest[i][RCOMP];
  870.     moveq    #0,d7
  871.     move.b    0(a4,d2.l*4),d7
  872. ;     Gd = dest[i][GCOMP];
  873.     lea    0(a4,d2.l*4),a0
  874.     moveq    #0,d6
  875.     move.b    1(a0),d6
  876. ;     Bd = dest[i][BCOMP];
  877.     lea    0(a4,d2.l*4),a0
  878.     moveq    #0,d5
  879.     move.b    2(a0),d5
  880. ;     Ad = dest[i][ACOMP];
  881.     lea    0(a4,d2.l*4),a0
  882.     moveq    #0,d3
  883.     move.b    3(a0),d3
  884. ;     switch (ctx->Color.BlendSrc)
  885.     move.l    $21EE(a2),d0
  886.     cmp.l    #$306,d0
  887.     beq    L241
  888.     bgt.b    L321
  889.     cmp.l    #$303,d0
  890.     beq    L244
  891.     bgt.b    L322
  892.     cmp.l    #1,d0
  893.     beq    L240
  894.     bgt.b    L323
  895.     cmp.l    #0,d0
  896.     beq.b    L239
  897.     bra    L255
  898. L323
  899.     cmp.l    #$302,d0
  900.     beq    L243
  901.     bra    L255
  902. L322
  903.     cmp.l    #$304,d0
  904.     beq    L245
  905.     cmp.l    #$305,d0
  906.     beq    L246
  907.     bra    L255
  908. L321
  909.     cmp.l    #$8002,d0
  910.     beq    L252
  911.     bgt.b    L324
  912.     cmp.l    #$308,d0
  913.     beq    L247
  914.     bgt.b    L325
  915.     blt    L242
  916. L325
  917.     cmp.l    #$8001,d0
  918.     beq    L251
  919.     bra    L255
  920. L324
  921.     cmp.l    #$8003,d0
  922.     beq    L253
  923.     cmp.l    #$8004,d0
  924.     beq    L254
  925.     bra    L255
  926. ;        
  927. L239
  928. ;           sR = sG = sB = sA = 0.0F;
  929.     fmove.s    #$.00000000,fp2
  930.     fmove.x    fp2,fp3
  931.     fmove.x    fp2,fp6
  932.     fmove.s    fp6,-$3C(a5)
  933. ;           
  934.     bra    L256
  935. L240
  936. ;           sR = sG = sB = sA = 1.0F;
  937.     fmove.s    #$.3F800000,fp2
  938.     fmove.x    fp2,fp3
  939.     fmove.x    fp2,fp6
  940.     fmove.s    fp6,-$3C(a5)
  941. ;           
  942.     bra    L256
  943. L241
  944. ;           sR = (GLfloat) Rd * rscale;
  945.     fmove.l    d7,fp0
  946.     fmul.s    -4(a5),fp0
  947.     fmove.x    fp0,fp6
  948. ;           sG = (GLfloat) Gd * gscale;
  949.     fmove.l    d6,fp0
  950.     fmove.s    fp0,-$3C(a5)
  951.     fmove.s    -$3C(a5),fp0
  952.     fmul.s    -$8(a5),fp0
  953.     fmove.s    fp0,-$3C(a5)
  954. ;           sB = (GLfloat) Bd * bscale;
  955.     fmove.l    d5,fp2
  956.     fmul.s    -$C(a5),fp2
  957. ;           sA = (GLfloat) Ad * ascale;
  958.     fmove.l    d3,fp3
  959.     fmul.s    -$10(a5),fp3
  960. ;           
  961.     bra    L256
  962. L242
  963. ;           sR = 1.0F - (GLfloat) Rd * rscale;
  964.     fmove.l    d7,fp0
  965.     fmul.s    -4(a5),fp0
  966.     fmove.s    #$.3F800000,fp1
  967.     fsub.x    fp0,fp1
  968.     fmove.x    fp1,fp6
  969. ;           sG = 1.0F - (GLfloat) Gd * gscale;
  970.     fmove.l    d6,fp0
  971.     fmul.s    -$8(a5),fp0
  972.     fmove.s    #$.3F800000,fp1
  973.     fsub.x    fp0,fp1
  974.     fmove.s    fp1,-$3C(a5)
  975. ;           sB = 1.0F - (GLfloat) Bd * bscale;
  976.     fmove.l    d5,fp0
  977.     fmul.s    -$C(a5),fp0
  978.     fmove.s    #$.3F800000,fp2
  979.     fsub.x    fp0,fp2
  980. ;           sA = 1.0F - (GLfloat) Ad * ascale;
  981.     fmove.l    d3,fp0
  982.     fmul.s    -$10(a5),fp0
  983.     fmove.s    #$.3F800000,fp3
  984.     fsub.x    fp0,fp3
  985. ;           
  986.     bra    L256
  987. L243
  988. ;           sR = sG = sB = sA = (GLfloat) As * ascale;
  989.     fmove.l    d4,fp3
  990.     fmove.x    fp3,fp0
  991.     fmul.s    -$10(a5),fp0
  992.     fmove.x    fp0,fp3
  993.     fmove.x    fp3,fp2
  994.     fmove.s    fp2,-$3C(a5)
  995.     fmove.s    -$3C(a5),fp6
  996. ;           
  997.     bra    L256
  998. L244
  999. ;           sR = sG = sB = sA = (GLfloat) 1.0F - (GLfloat) As * 
  1000.     fmove.l    d4,fp0
  1001.     fmul.s    -$10(a5),fp0
  1002.     fmove.s    #$.3F800000,fp1
  1003.     fsub.x    fp0,fp1
  1004.     fmove.x    fp1,fp3
  1005.     fmove.x    fp3,fp2
  1006.     fmove.s    fp2,-$3C(a5)
  1007.     fmove.s    -$3C(a5),fp6
  1008. ;           
  1009.     bra    L256
  1010. L245
  1011. ;           sR = sG = sB = sA =(GLfloat) Ad * ascale;
  1012.     fmove.l    d3,fp3
  1013.     fmove.x    fp3,fp0
  1014.     fmul.s    -$10(a5),fp0
  1015.     fmove.x    fp0,fp3
  1016.     fmove.x    fp3,fp2
  1017.     fmove.s    fp2,-$3C(a5)
  1018.     fmove.s    -$3C(a5),fp6
  1019. ;           
  1020.     bra    L256
  1021. L246
  1022. ;           sR = sG = sB = sA = 1.0F - (GLfloat) Ad * ascale;
  1023.     fmove.l    d3,fp0
  1024.     fmul.s    -$10(a5),fp0
  1025.     fmove.s    #$.3F800000,fp1
  1026.     fsub.x    fp0,fp1
  1027.     fmove.x    fp1,fp3
  1028.     fmove.x    fp3,fp2
  1029.     fmove.s    fp2,-$3C(a5)
  1030.     fmove.s    -$3C(a5),fp6
  1031. ;           
  1032.     bra    L256
  1033. L247
  1034. ;           if (As < 1.0F - (GLfloat) Ad * ascale) 
  1035.     fmove.l    d4,fp1
  1036.     fmove.l    d3,fp0
  1037.     fmul.s    -$10(a5),fp0
  1038.     fmove.s    #$.3F800000,fp2
  1039.     fsub.x    fp0,fp2
  1040.     fcmp.x    fp2,fp1
  1041.     fboge.b    L249
  1042. L248
  1043. ;          sR = sG = sB = (GLfloat) As * ascale;
  1044.     fmove.l    d4,fp2
  1045.     fmove.x    fp2,fp0
  1046.     fmul.s    -$10(a5),fp0
  1047.     fmove.x    fp0,fp2
  1048.     fmove.s    fp2,-$3C(a5)
  1049.     fmove.s    -$3C(a5),fp6
  1050.     bra.b    L250
  1051. L249
  1052. ;          sR = sG = sB = 1.0F - (GLfloat) Ad * ascale;
  1053.     fmove.l    d3,fp0
  1054.     fmul.s    -$10(a5),fp0
  1055.     fmove.s    #$.3F800000,fp1
  1056.     fsub.x    fp0,fp1
  1057.     fmove.x    fp1,fp2
  1058.     fmove.s    fp2,-$3C(a5)
  1059.     fmove.s    -$3C(a5),fp6
  1060. L250
  1061. ;           sA = 1.0;
  1062.     fmove.s    #$.3F800000,fp3
  1063. ;           
  1064.     bra    L256
  1065. L251
  1066. ;           sR = ctx->Color.BlendColor[0];
  1067.     fmove.s    $21FA(a2),fp6
  1068. ;           sG = ctx->Color.BlendColor[1];
  1069.     lea    $21FA(a2),a0
  1070.     move.l    4(a0),-$3C(a5)
  1071. ;           sB = ctx->Color.BlendColor[2];
  1072.     lea    $21FA(a2),a0
  1073.     fmove.s    $8(a0),fp2
  1074. ;           sA = ctx->Color.BlendColor[3];
  1075.     lea    $21FA(a2),a0
  1076.     fmove.s    $C(a0),fp3
  1077. ;           
  1078.     bra    L256
  1079. L252
  1080. ;           sR = 1.0F - ctx->Color.BlendColor[0];
  1081.     fmove.s    #$.3F800000,fp0
  1082.     fsub.s    $21FA(a2),fp0
  1083.     fmove.x    fp0,fp6
  1084. ;           sG = 1.0F - ctx->Color.BlendColor[1];
  1085.     lea    $21FA(a2),a0
  1086.     fmove.s    #$.3F800000,fp0
  1087.     fsub.s    4(a0),fp0
  1088.     fmove.s    fp0,-$3C(a5)
  1089. ;           sB = 1.0F - ctx->Color.BlendColor[2];
  1090.     lea    $21FA(a2),a0
  1091.     fmove.s    #$.3F800000,fp2
  1092.     fsub.s    $8(a0),fp2
  1093. ;           sA = 1.0F - ctx->Color.BlendColor[3];
  1094.     lea    $21FA(a2),a0
  1095.     fmove.s    #$.3F800000,fp3
  1096.     fsub.s    $C(a0),fp3
  1097. ;           
  1098.     bra.b    L256
  1099. L253
  1100. ;           sR = sG = sB = sA = ctx->Color.BlendColor[3];
  1101.     lea    $21FA(a2),a0
  1102.     fmove.s    $C(a0),fp3
  1103.     fmove.x    fp3,fp2
  1104.     fmove.s    fp2,-$3C(a5)
  1105.     fmove.s    -$3C(a5),fp6
  1106. ;           
  1107.     bra.b    L256
  1108. L254
  1109. ;           sR = sG = sB = sA = 1.0F - ctx->Color.BlendColor[3];
  1110.     lea    $21FA(a2),a0
  1111.     fmove.s    #$.3F800000,fp0
  1112.     fsub.s    $C(a0),fp0
  1113.     fmove.x    fp0,fp3
  1114.     fmove.x    fp3,fp2
  1115.     fmove.s    fp2,-$3C(a5)
  1116.     fmove.s    -$3C(a5),fp6
  1117. ;           
  1118.     bra.b    L256
  1119. L255
  1120. ;           gl_problem(ctx, "Bad blend source factor in do_blend
  1121.     move.l    #L234,-(a7)
  1122.     move.l    a2,-(a7)
  1123.     jsr    _gl_problem
  1124.     addq.w    #$8,a7
  1125. L256
  1126. ;     switch (ctx->Color.BlendDst)
  1127.     move.l    $21F2(a2),d0
  1128.     cmp.l    #$304,d0
  1129.     beq    L263
  1130.     bgt.b    L326
  1131.     cmp.l    #$301,d0
  1132.     beq    L260
  1133.     bgt.b    L327
  1134.     cmp.l    #1,d0
  1135.     beq    L258
  1136.     bgt.b    L328
  1137.     cmp.l    #0,d0
  1138.     beq.b    L257
  1139.     bra    L269
  1140. L328
  1141.     cmp.l    #$300,d0
  1142.     beq    L259
  1143.     bra    L269
  1144. L327
  1145.     cmp.l    #$302,d0
  1146.     beq    L261
  1147.     cmp.l    #$303,d0
  1148.     beq    L262
  1149.     bra    L269
  1150. L326
  1151.     cmp.l    #$8002,d0
  1152.     beq    L266
  1153.     bgt.b    L329
  1154.     cmp.l    #$305,d0
  1155.     beq    L264
  1156.     cmp.l    #$8001,d0
  1157.     beq    L265
  1158.     bra    L269
  1159. L329
  1160.     cmp.l    #$8003,d0
  1161.     beq    L267
  1162.     cmp.l    #$8004,d0
  1163.     beq    L268
  1164.     bra    L269
  1165. ;        
  1166. L257
  1167. ;           dR = dG = dB = dA = 0.0F;
  1168.     fmove.s    #$.00000000,fp4
  1169.     fmove.x    fp4,fp5
  1170.     fmove.s    fp4,fp7
  1171.     fmove.s    fp7,-$4C(a5)
  1172. ;           
  1173.     bra    L270
  1174. L258
  1175. ;           dR = dG = dB = dA = 1.0F;
  1176.     fmove.s    #$.3F800000,fp4
  1177.     fmove.x    fp4,fp5
  1178.     fmove.s    fp4,fp7
  1179.     fmove.s    fp7,-$4C(a5)
  1180. ;           
  1181.     bra    L270
  1182. L259
  1183. ;           dR = (GLfloat) Rs * rscale;
  1184.     fmove.l    -$18(a5),fp0
  1185.     fmul.s    -4(a5),fp0
  1186.     fmove.s    fp0,fp7
  1187. ;           dG = (GLfloat) Gs * gscale;
  1188.     fmove.l    -$1C(a5),fp0
  1189.     fmove.s    fp0,-$4C(a5)
  1190.     fmove.s    -$4C(a5),fp0
  1191.     fmul.s    -$8(a5),fp0
  1192.     fmove.s    fp0,-$4C(a5)
  1193. ;           dB = (GLfloat) Bs * bscale;
  1194.     fmove.l    -$20(a5),fp4
  1195.     fmul.s    -$C(a5),fp4
  1196. ;           dA = (GLfloat) As * ascale;
  1197.     fmove.l    d4,fp5
  1198.     fmul.s    -$10(a5),fp5
  1199. ;           
  1200.     bra    L270
  1201. L260
  1202. ;           dR = 1.0F - (GLfloat) Rs * rscale;
  1203.     fmove.l    -$18(a5),fp0
  1204.     fmul.s    -4(a5),fp0
  1205.     fmove.s    #$.3F800000,fp1
  1206.     fsub.x    fp0,fp1
  1207.     fmove.s    fp1,fp7
  1208. ;           dG = 1.0F - (GLfloat) Gs * gscale;
  1209.     fmove.l    -$1C(a5),fp0
  1210.     fmul.s    -$8(a5),fp0
  1211.     fmove.s    #$.3F800000,fp1
  1212.     fsub.x    fp0,fp1
  1213.     fmove.s    fp1,-$4C(a5)
  1214. ;           dB = 1.0F - (GLfloat) Bs * bscale;
  1215.     fmove.l    -$20(a5),fp0
  1216.     fmul.s    -$C(a5),fp0
  1217.     fmove.s    #$.3F800000,fp4
  1218.     fsub.x    fp0,fp4
  1219. ;           dA = 1.0F - (GLfloat) As * ascale;
  1220.     fmove.l    d4,fp0
  1221.     fmul.s    -$10(a5),fp0
  1222.     fmove.s    #$.3F800000,fp5
  1223.     fsub.x    fp0,fp5
  1224. ;           
  1225.     bra    L270
  1226. L261
  1227. ;           dR = dG = dB = dA = (GLfloat) As * ascale;
  1228.     fmove.l    d4,fp5
  1229.     fmove.x    fp5,fp0
  1230.     fmul.s    -$10(a5),fp0
  1231.     fmove.x    fp0,fp5
  1232.     fmove.x    fp5,fp4
  1233.     fmove.s    fp4,-$4C(a5)
  1234.     fmove.s    -$4C(a5),fp7
  1235. ;           
  1236.     bra    L270
  1237. L262
  1238. ;           dR = dG = dB = dA = (GLfloat) 1.0F - (GLfloat) As * 
  1239.     fmove.l    d4,fp0
  1240.     fmul.s    -$10(a5),fp0
  1241.     fmove.s    #$.3F800000,fp1
  1242.     fsub.x    fp0,fp1
  1243.     fmove.x    fp1,fp5
  1244.     fmove.x    fp5,fp4
  1245.     fmove.s    fp4,-$4C(a5)
  1246.     fmove.s    -$4C(a5),fp7
  1247. ;           
  1248.     bra    L270
  1249. L263
  1250. ;           dR = dG = dB = dA = (GLfloat) Ad * ascale;
  1251.     fmove.l    d3,fp5
  1252.     fmove.x    fp5,fp0
  1253.     fmul.s    -$10(a5),fp0
  1254.     fmove.x    fp0,fp5
  1255.     fmove.x    fp5,fp4
  1256.     fmove.s    fp4,-$4C(a5)
  1257.     fmove.s    -$4C(a5),fp7
  1258. ;           
  1259.     bra    L270
  1260. L264
  1261. ;           dR = dG = dB = dA = 1.0F - (GLfloat) Ad * ascale;
  1262.     fmove.l    d3,fp0
  1263.     fmul.s    -$10(a5),fp0
  1264.     fmove.s    #$.3F800000,fp1
  1265.     fsub.x    fp0,fp1
  1266.     fmove.x    fp1,fp5
  1267.     fmove.x    fp5,fp4
  1268.     fmove.s    fp4,-$4C(a5)
  1269.     fmove.s    -$4C(a5),fp7
  1270. ;           
  1271.     bra    L270
  1272. L265
  1273. ;           dR = ctx->Color.BlendColor[0];
  1274.     fmove.s    $21FA(a2),fp7
  1275. ;           dG = ctx->Color.BlendColor[1];
  1276.     lea    $21FA(a2),a0
  1277.     move.l    4(a0),-$4C(a5)
  1278. ;           dB = ctx->Color.BlendColor[2];
  1279.     lea    $21FA(a2),a0
  1280.     fmove.s    $8(a0),fp4
  1281. ;           dA = ctx->Color.BlendColor[3];
  1282.     lea    $21FA(a2),a0
  1283.     fmove.s    $C(a0),fp5
  1284. ;           
  1285.     bra    L270
  1286. L266
  1287. ;           dR = 1.0F - ctx->Color.BlendColor[0];
  1288.     fmove.s    #$.3F800000,fp0
  1289.     fsub.s    $21FA(a2),fp0
  1290.     fmove.s    fp0,fp7
  1291. ;           dG = 1.0F - ctx->Color.BlendColor[1];
  1292.     lea    $21FA(a2),a0
  1293.     fmove.s    #$.3F800000,fp0
  1294.     fsub.s    4(a0),fp0
  1295.     fmove.s    fp0,-$4C(a5)
  1296. ;           dB = 1.0F - ctx->Color.BlendColor[2];
  1297.     lea    $21FA(a2),a0
  1298.     fmove.s    #$.3F800000,fp4
  1299.     fsub.s    $8(a0),fp4
  1300. ;           dA = 1.0F - ctx->Color.BlendColor[3];
  1301.     lea    $21FA(a2),a0
  1302.     fmove.s    #$.3F800000,fp5
  1303.     fsub.s    $C(a0),fp5
  1304. ;           
  1305.     bra.b    L270
  1306. L267
  1307. ;           dR = dG = dB = dA = ctx->Color.BlendColor[3];
  1308.     lea    $21FA(a2),a0
  1309.     fmove.s    $C(a0),fp5
  1310.     fmove.x    fp5,fp4
  1311.     fmove.s    fp4,-$4C(a5)
  1312.     fmove.s    -$4C(a5),fp7
  1313. ;           
  1314.     bra.b    L270
  1315. L268
  1316. ;           dR = dG = dB = dA = 1.0F - ctx->Color.BlendColor[3] 
  1317.     lea    $21FA(a2),a0
  1318.     fmove.s    $C(a0),fp0
  1319.     fmul.s    -$10(a5),fp0
  1320.     fmove.s    #$.3F800000,fp1
  1321.     fsub.x    fp0,fp1
  1322.     fmove.x    fp1,fp5
  1323.     fmove.x    fp5,fp4
  1324.     fmove.s    fp4,-$4C(a5)
  1325.     fmove.s    -$4C(a5),fp7
  1326. ;           
  1327.     bra.b    L270
  1328. L269
  1329. ;           gl_problem(ctx, "Bad blend dest factor in do_blend");
  1330.     move.l    #L235,-(a7)
  1331.     move.l    a2,-(a7)
  1332.     jsr    _gl_problem
  1333.     addq.w    #$8,a7
  1334. L270
  1335. ;     if (dA < 0.0F)  
  1336.     fcmp.s    #$.00000000,fp5
  1337.     fboge.b    L272
  1338. L271
  1339. ;     if (dA < 0.0F)  dA = 0.0F;
  1340.     fmove.s    #$.00000000,fp5
  1341. L272
  1342. ;     if (dR < 0.0F)  
  1343.     fmove.x    fp7,fp0
  1344.     fcmp.s    #$.00000000,fp0
  1345.     fboge.b    L274
  1346. L273
  1347. ;     if (dR < 0.0F)  dR = 0.0F;
  1348.     fmove.s    #$.00000000,fp7
  1349. L274
  1350. ;     if (dG < 0.0F)  
  1351.     fmove.s    -$4C(a5),fp0
  1352.     fcmp.s    #$.00000000,fp0
  1353.     fboge.b    L276
  1354. L275
  1355. ;     if (dG < 0.0F)  dG = 0.0F;
  1356.     clr.l    -$4C(a5)
  1357. L276
  1358. ;     if (dB < 0.0F)  
  1359.     fcmp.s    #$.00000000,fp4
  1360.     fboge.b    L278
  1361. L277
  1362. ;     if (dB < 0.0F)  dB = 0.0F;
  1363.     fmove.s    #$.00000000,fp4
  1364. L278
  1365. ;     if (sA < 0.0F)  
  1366.     fcmp.s    #$.00000000,fp3
  1367.     fboge.b    L280
  1368. L279
  1369. ;     if (sA < 0.0F)  sA = 0.0F;
  1370.     fmove.s    #$.00000000,fp3
  1371. L280
  1372. ;     if (sR < 0.0F)  
  1373.     fmove.x    fp6,fp0
  1374.     fcmp.s    #$.00000000,fp0
  1375.     fboge.b    L282
  1376. L281
  1377. ;     if (sR < 0.0F)  sR = 0.0F;
  1378.     fmove.s    #$.00000000,fp6
  1379. L282
  1380. ;     if (sG < 0.0F)  
  1381.     fmove.s    -$3C(a5),fp0
  1382.     fcmp.s    #$.00000000,fp0
  1383.     fboge.b    L284
  1384. L283
  1385. ;     if (sG < 0.0F)  sG = 0.0F;
  1386.     clr.l    -$3C(a5)
  1387. L284
  1388. ;     if (sB < 0.0F)  
  1389.     fcmp.s    #$.00000000,fp2
  1390.     fboge.b    L286
  1391. L285
  1392. ;     if (sB < 0.0F)  sB = 0.0F;
  1393.     fmove.s    #$.00000000,fp2
  1394. L286
  1395. ;     if (ctx->Color.BlendEquation==GL_FUNC_ADD_EXT) 
  1396.     move.l    $21F6(a2),d0
  1397.     cmp.l    #$8006,d0
  1398.     bne    L288
  1399. L287
  1400. ;        r = Rs * sR + Rd * dR;
  1401.     fmove.l    -$18(a5),fp0
  1402.     fmove.s    fp0,-$58(a5)
  1403.     fmove.s    -$58(a5),fp0
  1404.     fmul.x    fp6,fp0
  1405.     fmove.s    fp0,-$58(a5)
  1406.     fmove.l    d7,fp0
  1407.     fmul.x    fp7,fp0
  1408.     fmove.s    -$58(a5),fp1
  1409.     fadd.x    fp0,fp1
  1410.     fmove.s    fp1,-$58(a5)
  1411. ;        g = Gs * sG + Gd * dG;
  1412.     fmove.l    -$1C(a5),fp0
  1413.     fmove.s    fp0,-$5C(a5)
  1414.     fmove.s    -$5C(a5),fp0
  1415.     fmul.s    -$3C(a5),fp0
  1416.     fmove.s    fp0,-$5C(a5)
  1417.     fmove.l    d6,fp0
  1418.     fmul.s    -$4C(a5),fp0
  1419.     fmove.s    -$5C(a5),fp1
  1420.     fadd.x    fp0,fp1
  1421.     fmove.s    fp1,-$5C(a5)
  1422. ;        b = Bs * sB + Bd * dB;
  1423.     fmove.l    -$20(a5),fp0
  1424.     fmove.s    fp0,-$60(a5)
  1425.     fmove.s    -$60(a5),fp0
  1426.     fmul.x    fp2,fp0
  1427.     fmove.s    fp0,-$60(a5)
  1428.     fmove.l    d5,fp0
  1429.     fmul.x    fp4,fp0
  1430.     fmove.s    -$60(a5),fp1
  1431.     fadd.x    fp0,fp1
  1432.     fmove.s    fp1,-$60(a5)
  1433. ;        a = As * sA + Ad * dA;
  1434.     fmove.l    d4,fp0
  1435.     fmove.s    fp0,-$64(a5)
  1436.     fmove.s    -$64(a5),fp0
  1437.     fmul.x    fp3,fp0
  1438.     fmove.s    fp0,-$64(a5)
  1439.     fmove.l    d3,fp0
  1440.     fmul.x    fp5,fp0
  1441.     fmove.s    -$64(a5),fp1
  1442.     fadd.x    fp0,fp1
  1443.     fmove.s    fp1,-$64(a5)
  1444.     bra    L292
  1445. L288
  1446. ;     else if (ctx->Color.BlendEquation==GL_FUNC_SUBTRACT_EXT) 
  1447.     move.l    $21F6(a2),d0
  1448.     cmp.l    #$800A,d0
  1449.     bne    L290
  1450. L289
  1451. ;        r = Rs * sR - Rd * dR;
  1452.     fmove.l    -$18(a5),fp0
  1453.     fmove.s    fp0,-$58(a5)
  1454.     fmove.s    -$58(a5),fp0
  1455.     fmul.x    fp6,fp0
  1456.     fmove.s    fp0,-$58(a5)
  1457.     fmove.l    d7,fp0
  1458.     fmul.x    fp7,fp0
  1459.     fmove.s    -$58(a5),fp1
  1460.     fsub.x    fp0,fp1
  1461.     fmove.s    fp1,-$58(a5)
  1462. ;        g = Gs * sG - Gd * dG;
  1463.     fmove.l    -$1C(a5),fp0
  1464.     fmove.s    fp0,-$5C(a5)
  1465.     fmove.s    -$5C(a5),fp0
  1466.     fmul.s    -$3C(a5),fp0
  1467.     fmove.s    fp0,-$5C(a5)
  1468.     fmove.l    d6,fp0
  1469.     fmul.s    -$4C(a5),fp0
  1470.     fmove.s    -$5C(a5),fp1
  1471.     fsub.x    fp0,fp1
  1472.     fmove.s    fp1,-$5C(a5)
  1473. ;        b = Bs * sB - Bd * dB;
  1474.     fmove.l    -$20(a5),fp0
  1475.     fmove.s    fp0,-$60(a5)
  1476.     fmove.s    -$60(a5),fp0
  1477.     fmul.x    fp2,fp0
  1478.     fmove.s    fp0,-$60(a5)
  1479.     fmove.l    d5,fp0
  1480.     fmul.x    fp4,fp0
  1481.     fmove.s    -$60(a5),fp1
  1482.     fsub.x    fp0,fp1
  1483.     fmove.s    fp1,-$60(a5)
  1484. ;        a = As * sA - Ad * dA;
  1485.     fmove.l    d4,fp0
  1486.     fmove.s    fp0,-$64(a5)
  1487.     fmove.s    -$64(a5),fp0
  1488.     fmul.x    fp3,fp0
  1489.     fmove.s    fp0,-$64(a5)
  1490.     fmove.l    d3,fp0
  1491.     fmul.x    fp5,fp0
  1492.     fmove.s    -$64(a5),fp1
  1493.     fsub.x    fp0,fp1
  1494.     fmove.s    fp1,-$64(a5)
  1495.     bra    L292
  1496. L290
  1497. ;     else if (ctx->Color.BlendEquation==GL_FUNC_REVERSE_SUBTRACT
  1498.     move.l    $21F6(a2),d0
  1499.     cmp.l    #$800B,d0
  1500.     bne    L292
  1501. L291
  1502. ;        r = Rd * dR - Rs * sR;
  1503.     fmove.l    d7,fp0
  1504.     fmove.s    fp0,-$58(a5)
  1505.     fmove.s    -$58(a5),fp0
  1506.     fmul.x    fp7,fp0
  1507.     fmove.s    fp0,-$58(a5)
  1508.     fmove.l    -$18(a5),fp0
  1509.     fmul.x    fp6,fp0
  1510.     fmove.s    -$58(a5),fp1
  1511.     fsub.x    fp0,fp1
  1512.     fmove.s    fp1,-$58(a5)
  1513. ;        g = Gd * dG - Gs * sG;
  1514.     fmove.l    d6,fp0
  1515.     fmove.s    fp0,-$5C(a5)
  1516.     fmove.s    -$5C(a5),fp0
  1517.     fmul.s    -$4C(a5),fp0
  1518.     fmove.s    fp0,-$5C(a5)
  1519.     fmove.l    -$1C(a5),fp0
  1520.     fmul.s    -$3C(a5),fp0
  1521.     fmove.s    -$5C(a5),fp1
  1522.     fsub.x    fp0,fp1
  1523.     fmove.s    fp1,-$5C(a5)
  1524. ;        b = Bd * dB - Bs * sB;
  1525.     fmove.l    d5,fp0
  1526.     fmove.s    fp0,-$60(a5)
  1527.     fmove.s    -$60(a5),fp0
  1528.     fmul.x    fp4,fp0
  1529.     fmove.s    fp0,-$60(a5)
  1530.     fmove.l    -$20(a5),fp0
  1531.     fmul.x    fp2,fp0
  1532.     fmove.s    -$60(a5),fp1
  1533.     fsub.x    fp0,fp1
  1534.     fmove.s    fp1,-$60(a5)
  1535. ;        a = Ad * dA - As * sA;
  1536.     fmove.l    d3,fp0
  1537.     fmove.s    fp0,-$64(a5)
  1538.     fmove.s    -$64(a5),fp0
  1539.     fmul.x    fp5,fp0
  1540.     fmove.s    fp0,-$64(a5)
  1541.     fmove.l    d4,fp0
  1542.     fmul.x    fp3,fp0
  1543.     fmove.s    -$64(a5),fp1
  1544.     fsub.x    fp0,fp1
  1545.     fmove.s    fp1,-$64(a5)
  1546. L292
  1547. ;     rgba[i][RCOMP] = (GLint) CLAMP( r, 0.0F, 255.0F );
  1548.     fmove.s    -$58(a5),fp0
  1549.     fcmp.s    #$.00000000,fp0
  1550.     fboge.b    L294
  1551. L293
  1552.     fmove.s    #$.00000000,fp0
  1553.     bra.b    L298
  1554. L294
  1555.     fmove.s    -$58(a5),fp0
  1556.     fcmp.s    #$.437F0000,fp0
  1557.     fbole.b    L296
  1558. L295
  1559.     fmove.s    #$.437F0000,fp0
  1560.     bra.b    L297
  1561. L296
  1562.     fmove.s    -$58(a5),fp0
  1563. L297
  1564. L298
  1565.     fmove.l    fp0,d0
  1566.     move.b    d0,0(a3,d2.l*4)
  1567. ;     rgba[i][GCOMP] = (GLint) CLAMP( g, 0.0F, 255.0F );
  1568.     fmove.s    -$5C(a5),fp0
  1569.     fcmp.s    #$.00000000,fp0
  1570.     fboge.b    L300
  1571. L299
  1572.     fmove.s    #$.00000000,fp0
  1573.     bra.b    L304
  1574. L300
  1575.     fmove.s    -$5C(a5),fp0
  1576.     fcmp.s    #$.437F0000,fp0
  1577.     fbole.b    L302
  1578. L301
  1579.     fmove.s    #$.437F0000,fp0
  1580.     bra.b    L303
  1581. L302
  1582.     fmove.s    -$5C(a5),fp0
  1583. L303
  1584. L304
  1585.     fmove.l    fp0,d0
  1586.     lea    0(a3,d2.l*4),a0
  1587.     move.b    d0,1(a0)
  1588. ;     rgba[i][BCOMP] = (GLint) CLAMP( b, 0.0F, 255.0F );
  1589.     fmove.s    -$60(a5),fp0
  1590.     fcmp.s    #$.00000000,fp0
  1591.     fboge.b    L306
  1592. L305
  1593.     fmove.s    #$.00000000,fp0
  1594.     bra.b    L310
  1595. L306
  1596.     fmove.s    -$60(a5),fp0
  1597.     fcmp.s    #$.437F0000,fp0
  1598.     fbole.b    L308
  1599. L307
  1600.     fmove.s    #$.437F0000,fp0
  1601.     bra.b    L309
  1602. L308
  1603.     fmove.s    -$60(a5),fp0
  1604. L309
  1605. L310
  1606.     fmove.l    fp0,d0
  1607.     lea    0(a3,d2.l*4),a0
  1608.     move.b    d0,2(a0)
  1609. ;     rgba[i][ACOMP] = (GLint) CLAMP( a, 0.0F, 255.0F );
  1610.     fmove.s    -$64(a5),fp0
  1611.     fcmp.s    #$.00000000,fp0
  1612.     fboge.b    L312
  1613. L311
  1614.     fmove.s    #$.00000000,fp0
  1615.     bra.b    L316
  1616. L312
  1617.     fmove.s    -$64(a5),fp0
  1618.     fcmp.s    #$.437F0000,fp0
  1619.     fbole.b    L314
  1620. L313
  1621.     fmove.s    #$.437F0000,fp0
  1622.     bra.b    L315
  1623. L314
  1624.     fmove.s    -$64(a5),fp0
  1625. L315
  1626. L316
  1627.     fmove.l    fp0,d0
  1628.     lea    0(a3,d2.l*4),a0
  1629.     move.b    d0,3(a0)
  1630. L317
  1631.     addq.l    #1,d2
  1632. L318
  1633.     cmp.l    $C(a5),d2
  1634.     blo    L237
  1635. L319
  1636.     fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
  1637.     movem.l    (a7)+,d2-d7/a2-a4
  1638.     unlk    a5
  1639.     rts
  1640.  
  1641. L235
  1642.     dc.b    'Bad blend dest factor in do_blend',0
  1643. L234
  1644.     dc.b    'Bad blend source factor in do_blend',0
  1645.  
  1646.     SECTION "_set_blend_function:0",CODE
  1647.  
  1648.  
  1649. ;static void set_blend_function(GLcontext *ctx)
  1650. _set_blend_function
  1651.     move.l    d2,-(a7)
  1652.     move.l    $8(a7),a0
  1653. L330
  1654. ;   GLenum eq = ctx->Color.BlendEquation;
  1655.     move.l    $21F6(a0),d0
  1656. ;   GLenum src = ctx->Color.BlendSrc;
  1657.     move.l    $21EE(a0),d2
  1658. ;   GLenum dst = ctx->Color.BlendDst;
  1659.     move.l    $21F2(a0),d1
  1660. ;   if (eq==GL_FUNC_ADD_EXT && src==GL_SRC_ALPHA && dst==GL_ONE_MI
  1661.     cmp.l    #$8006,d0
  1662.     bne.b    L334
  1663. L331
  1664.     cmp.l    #$302,d2
  1665.     bne.b    L334
  1666. L332
  1667.     cmp.l    #$303,d1
  1668.     bne.b    L334
  1669. L333
  1670. ;      ctx->Color.BlendFunc = blend_transparency;
  1671.     move.l    #_blend_transparency,$220A(a0)
  1672.     bra    L352
  1673. L334
  1674. ;   else if (eq==GL_FUNC_ADD_EXT && src==GL_ONE && dst==GL_ON
  1675.     cmp.l    #$8006,d0
  1676.     bne.b    L338
  1677. L335
  1678.     cmp.l    #1,d2
  1679.     bne.b    L338
  1680. L336
  1681.     cmp.l    #1,d1
  1682.     bne.b    L338
  1683. L337
  1684. ;      ctx->Color.BlendFunc = blend_add;
  1685.     move.l    #_blend_add,$220A(a0)
  1686.     bra.b    L352
  1687. L338
  1688. ;
  1689.     cmp.l    #$8006,d0
  1690.     beq.b    L340
  1691. L339
  1692.     cmp.l    #$800B,d0
  1693.     bne.b    L342
  1694. L340
  1695.     tst.l    d2
  1696.     bne.b    L342
  1697. L341
  1698.     cmp.l    #$300,d1
  1699.     beq.b    L346
  1700. L342
  1701.     cmp.l    #$8006,d0
  1702.     beq.b    L344
  1703. L343
  1704.     cmp.l    #$800A,d0
  1705.     bne.b    L347
  1706. L344
  1707.     cmp.l    #$306,d2
  1708.     bne.b    L347
  1709. L345
  1710.     tst.l    d1
  1711.     bne.b    L347
  1712. L346
  1713. ;      ctx->Color.BlendFunc = blend_modulate;
  1714.     move.l    #_blend_modulate,$220A(a0)
  1715.     bra.b    L352
  1716. L347
  1717. ;   else if (eq==GL_MIN_EXT) 
  1718.     cmp.l    #$8007,d0
  1719.     bne.b    L349
  1720. L348
  1721. ;      ctx->Color.BlendFunc = blend_min;
  1722.     move.l    #_blend_min,$220A(a0)
  1723.     bra.b    L352
  1724. L349
  1725. ;   else if (eq==GL_MAX_EXT) 
  1726.     cmp.l    #$8008,d0
  1727.     bne.b    L351
  1728. L350
  1729. ;      ctx->Color.BlendFunc = blend_max;
  1730.     move.l    #_blend_max,$220A(a0)
  1731.     bra.b    L352
  1732. L351
  1733. ;      ctx->Color.BlendFunc = blend_general;
  1734.     move.l    #_blend_general,$220A(a0)
  1735. L352
  1736.     move.l    (a7)+,d2
  1737.     rts
  1738.  
  1739.     SECTION "_gl_blend_span:0",CODE
  1740.  
  1741.  
  1742. ;void gl_blend_span( GLcontext *ctx, GLuint n, GLint x, GLint y,
  1743.     XDEF    _gl_blend_span
  1744. _gl_blend_span
  1745. L359    EQU    -$1900
  1746.     link    a5,#L359
  1747.     movem.l    d2/d3/a2-a4,-(a7)
  1748.     movem.l    $10(a5),d1/d3/a4
  1749.     move.l    $C(a5),d2
  1750.     move.l    $8(a5),a2
  1751.     move.l    $1C(a5),a3
  1752. L353
  1753. ;   if (ctx->Color.BlendEquation==GL_LOGIC_OP && !ctx->Color.SWLog
  1754.     move.l    $21F6(a2),d0
  1755.     cmp.l    #$BF1,d0
  1756.     bne.b    L356
  1757. L354
  1758.     tst.b    $2214(a2)
  1759.     bne.b    L356
  1760. L355
  1761.     movem.l    (a7)+,d2/d3/a2-a4
  1762.     unlk    a5
  1763.     rts
  1764. L356
  1765. ;   gl_read_rgba_span( ctx, n, x, y, dest );
  1766.     pea    -$1900(a5)
  1767.     move.l    d3,-(a7)
  1768.     move.l    d1,-(a7)
  1769.     move.l    d2,-(a7)
  1770.     move.l    a2,-(a7)
  1771.     jsr    _gl_read_rgba_span
  1772.     add.w    #$14,a7
  1773. ;   if (!ctx->Color.BlendFunc)
  1774.     tst.l    $220A(a2)
  1775.     bne.b    L358
  1776. L357
  1777. ;      set_blend_function(ctx);
  1778.     move.l    a2,-(a7)
  1779.     jsr    _set_blend_function
  1780.     addq.w    #4,a7
  1781. L358
  1782. ;   (*ctx->Color.BlendFunc)( ctx, n, mask, rgba, (CONST GLubyte(*)
  1783.     pea    -$1900(a5)
  1784.     move.l    a4,-(a7)
  1785.     move.l    a3,-(a7)
  1786.     move.l    d2,-(a7)
  1787.     move.l    a2,-(a7)
  1788.     move.l    $220A(a2),a0
  1789.     jsr    (a0)
  1790.     add.w    #$14,a7
  1791.     movem.l    (a7)+,d2/d3/a2-a4
  1792.     unlk    a5
  1793.     rts
  1794.  
  1795.     SECTION "_gl_blend_pixels:0",CODE
  1796.  
  1797.  
  1798. ;void gl_blend_pixels( GLcontext *ctx,
  1799.     XDEF    _gl_blend_pixels
  1800. _gl_blend_pixels
  1801. L371    EQU    -$4B04
  1802.     link    a5,#L371
  1803.     movem.l    d2/a2-a4,-(a7)
  1804.     movem.l    $C(a5),d2/a4
  1805.     move.l    $8(a5),a2
  1806.     move.l    $1C(a5),a3
  1807. L360
  1808. ;   if (ctx->Color.BlendEquation==GL_LOGIC_OP && !ctx->Color.SWLog
  1809.     move.l    $21F6(a2),d0
  1810.     cmp.l    #$BF1,d0
  1811.     bne.b    L363
  1812. L361
  1813.     tst.b    $2214(a2)
  1814.     bne.b    L363
  1815. L362
  1816.     movem.l    (a7)+,d2/a2-a4
  1817.     unlk    a5
  1818.     rts
  1819. L363
  1820. ;   (*ctx->Driver.ReadRGBAPixels)( ctx, n, x, y, dest, mask );
  1821.     move.l    a3,-(a7)
  1822.     pea    -$4B00(a5)
  1823.     move.l    $14(a5),-(a7)
  1824.     move.l    a4,-(a7)
  1825.     move.l    d2,-(a7)
  1826.     move.l    a2,-(a7)
  1827.     move.l    $958(a2),a0
  1828.     jsr    (a0)
  1829.     add.w    #$18,a7
  1830. ;   if (ctx->RasterMask & ALPHABUF_BIT) 
  1831.     move.l    a2,a0
  1832.     add.l    #$E974,a0
  1833.     move.l    (a0),d0
  1834.     and.l    #$100,d0
  1835.     beq.b    L365
  1836. L364
  1837. ;      gl_read_alpha_pixels( ctx, n, x, y, dest, mask );
  1838.     move.l    a3,-(a7)
  1839.     pea    -$4B00(a5)
  1840.     move.l    $14(a5),-(a7)
  1841.     move.l    a4,-(a7)
  1842.     move.l    d2,-(a7)
  1843.     move.l    a2,-(a7)
  1844.     jsr    _gl_read_alpha_pixels
  1845.     add.w    #$18,a7
  1846.     bra.b    L368
  1847. L365
  1848. ;      for (i=0;
  1849.     moveq    #0,d0
  1850.     bra.b    L367
  1851. L366
  1852. ;     dest[i][ACOMP] = 255;
  1853.     lea    -$4B00(a5),a0
  1854.     lea    0(a0,d0.l*4),a0
  1855.     move.b    #$FF,3(a0)
  1856.     addq.l    #1,d0
  1857. L367
  1858.     cmp.l    d2,d0
  1859.     blo.b    L366
  1860. L368
  1861. ;   if (!ctx->Color.BlendFunc)
  1862.     tst.l    $220A(a2)
  1863.     bne.b    L370
  1864. L369
  1865. ;      set_blend_function(ctx);
  1866.     move.l    a2,-(a7)
  1867.     jsr    _set_blend_function
  1868.     addq.w    #4,a7
  1869. L370
  1870. ;   (*ctx->Color.BlendFunc)( ctx, n, mask, rgba, (CONST GLubyte(*)
  1871.     pea    -$4B00(a5)
  1872.     move.l    $18(a5),-(a7)
  1873.     move.l    a3,-(a7)
  1874.     move.l    d2,-(a7)
  1875.     move.l    a2,-(a7)
  1876.     move.l    $220A(a2),a0
  1877.     jsr    (a0)
  1878.     add.w    #$14,a7
  1879.     movem.l    (a7)+,d2/a2-a4
  1880.     unlk    a5
  1881.     rts
  1882.  
  1883.     END
  1884.